Interface

( line )

Recognize the <shape> characters and keywords.

( @*shapechar@@@#1@#1@@@*shapechar@<@#1@#1@@@*shapechar@*@#1@#1@@

@*shape@left@@left@ @*shape@right@@right@ @*shape@flip@@flip@ @*shape@halfsize@@halfsize@ @*shape@dblsize@@dblsize@ @*shape@vflip@@vflip@ @*shape@hflip@@hflip@

@@@shearing )

2 Each style modifier adds code to one, or both, of two global lists. These contents of these lists, called |@@ | and |@@ |. An implementation must define macros which are to be bound to the control sequence names |@| and |@|, which are prepended and appended to the |@@| and |Connect@@| methods for the current <object>.

Also |@@| and |@@| must be modified, if this has not already been done as indicated by |@transform@| having expansion ||.

( @@ @@

@@ @@ @@transform@ @@@ @@@ )

The transformations must be implemented by emulating the adjoint coordinate transformations. This requires that code be added to |preXYtransform@@| in reverse order to the order of occurrence of the <shape> modifiers. The code is added to |@@ | in natural order, so that each addition to |@@ | can be closed off, if necessary, in a correctly nested sequence.

( @@ @transform@@@ @##1@@@@##1@@@ @##1@@@@##1@@

@@@transform@=

@@ )

: The reference point does not move correctly in when a shift modifier has been applied before a rotation. The object prints outside of its bounding ||. Fix this!!

Global macros are used, so that the same styles can be reused by successive objects without having to re-interpret <shape> modifiers, as described next.

2